package com.bestcem.xm.user.dao;

import com.bestcem.xm.user.entity.mysql.UserUserRole;
import com.bestcem.xm.user.entity.pojo.UserUserRoleDO;

import java.util.List;

/**
 * 用户与角色的关联业务
 *
 * @author wangyunyun <yunyun.wang@idiaoyan.com>
 * @version v1.0
 * @date 2023/3/4 14:30
 */
public interface UserUserRoleDao {

    /**
     * 根据条件查询用户与角色的关联关系
     *
     * @param userUserRoleDO
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2023/3/4 14:30
     */
    List<UserUserRoleDO> listByCondition(UserUserRoleDO userUserRoleDO);

    /**
     * 创建用户与角色的关联关系
     *
     * @param userUserRoleDO
     * @return String
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/8 21:57
     */
    String insertSelective(UserUserRoleDO userUserRoleDO);

    /**
     * 根据userId删除用户与角色的关联关系
     *
     * @param userId
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Object>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/9 10:37
     */
    int deleteByUserId(String userId);

    /**
     * 删除指定角色下某一批用户信息
     *
     * @param orgId   公司id
     * @param roleId  角色id
     * @param userIds 用户id列表
     * @return java.lang.Integer
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 13:07
     */
    Integer deleteByRoleIdAndUserIds(String orgId, String roleId, List<String> userIds);

    /**
     * 批量插入
     *
     * @param userRoles
     * @return int
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/9 13:56
     */
    int insertUserRoleList(List<UserUserRole> userRoles);

    /**
     * 根据roleIdList获取userIdList
     *
     * @param roleIdsList
     * @return java.util.List<java.lang.String>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/14 17:17
     */
    List<String> listByRoleIds(List<String> roleIdsList);

    /**
     * 根据userId获取角色id列表
     *
     * @param userId
     * @return
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/03/18 16:04
     */
    List<String> listRoleIdByUserId(String userId);

    /**
     * 根据主键有选择的做更新
     *
     * @param userUserRoleDO 用户埋点信息
     * @return java.lang.Integer 更新成功的条数
     * @author yanjishuo <jishuo.yan@idiaoyan.cn>
     * @date 2022/03/16 11:24
     */
    Integer updateSelectiveById(UserUserRoleDO userUserRoleDO);

    /**
     * 根据roleId删除
     *
     * @param roleId
     * @return java.lang.Integer
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/05/10 16:53
     */
    Integer deleteByRoleId(String roleId);


    /**
     * 根据roleId集合删除
     *
     * @param userId
     * @param roleIdList
     * @return java.lang.Integer
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/05/10 16:53
     */
    Integer deleteByRoleIdList(String userId, List<String> roleIdList);
}
